package socket;

import java.io.*;
import java.net.Socket;

/**
 * 聊天室客户端
 */
public class Client {
    /*
    java.net,Socket套接字
    Socket封装了TCP协议的通讯细节,是我们使用他可以与服务端建立网络连接,并通过
    它获取两个流(一个输入一个输出),然后使用这两个流的读写操作完成与服务端的数据交互
     */
private Socket socket;
/**
 * 创建一个构造方法,用来初始化客户端
 */
public Client(){
    try{
        /*
        实例化Socket时通常需要传入两个参数:
        参数1:服务端的地址信息(IP地址,如果连接本机则可用:localhost)
        参数2:服务端打开的服务端口,即:服务端ServerSocket申请的端口

        实例化Socket的过程就是连接服务端的过程,如果指定的地址与端口对应的
        服务端没有启动,或者输入信息有误导致无法连接时,会抛出下面的异常:
        java.net.ConnectException:Connection refused:connect
        提示连接拒绝.注:导致这个问题还有一种情况,服务端机器没有关闭防火墙.
         */
        System.out.println("正在连接服务端...");
        socket=new Socket("172.201.4.59".trim(),8088);
        System.out.println("与服务端成功建立连接");
    }catch(IOException e){
        e.printStackTrace();
    }
/**
 * 客户端开始工作的方法
  */
}
public void start(){
  try{
      /*
      Socket提供的方法:
      OutputStream getOutputStream()
      该方法会获取一个字节输出流,通过这个输出流写出的字节数据会通过网络
      发送给对方.
       */
      OutputStream out=socket.getOutputStream();
      PrintWriter pw=new PrintWriter(//高级流,按行写,自动行刷新
              new BufferedWriter(//高级流,块写文本,加速写
                      new OutputStreamWriter(//高级流,字符转字节,衔接字符与字节流
                              out,"utf-8"//低级流,将数据发送给对方计算机
                      )
              ),true
      );
      pw.println("唧唧复唧唧");
  }catch(IOException e){
      e.printStackTrace();
  }
}
    public static void main(String[] args) {
        Client client=new Client();//Client的构造方法被调用
        client.start();//start方法被调用,开始工作
    }
}
